using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using CapaAccesoDatos;
using CapaAccesoDatos.Clases;

namespace CapaNegocios
{
    /// <summary>
    /// Clase que se utilizara para el manejo de sanciones.
    /// </summary>
    public class Sancion
    {
        //---------- <Propiedades> ----------//
        /// <summary>
        /// Campo que almecena el id de la sancion.
        /// </summary>
        private int id;
        /// <summary>
        /// Campo que almacena el tiempo por el cual sera impuesta esta sancion.
        /// </summary>
        private int duracion;
        /// <summary>
        /// Campo que almacena informacion sobre la sancion aplicada.
        /// </summary>
        private string descripcion;

        //---------- <Accesores> ----------//
        /// <summary>
        /// Obtiene el ID de la sancion.
        /// </summary>
        /// <value>int id.</value>
        public int ID
        {
            get { return this.id; }
        }
        /// <summary>
        /// Obtiene la duracion de esta sancion.
        /// </summary>
        /// <value>int duracion.</value>
        public int Duracion
        {
            get { return this.duracion; }
        }
        /// <summary>
        /// Obtiene la descripcion de esta sancion.
        /// </summary>
        /// <value>string descripcion.</value>
        public string Descripcion
        {
            get { return this.descripcion; }
        }

        //---------- <Constructores y demas metodos> ----------//

        /// <summary>
        /// Inicializa una nueva instancia de la clase Sancion a partir de un id especificado.
        /// Busca en la base de datos una sancion a partir de este id.
        /// </summary>
        /// <param name="id">ID de la sancion.</param>        
        internal Sancion(int id)
        {
            TipoSancionCAD SancionRaw = TipoSancionCAD.BuscarPorId(id);

            this.id = SancionRaw.ID;
            this.duracion = SancionRaw.Duracion;
            this.descripcion = SancionRaw.Descripcion;
        }
        /// <summary>
        /// Constructor que inicializa el objeto Sancion con la informacion de la base de datos contenida en el
        /// objeto SancionCAD SancionRaw.
        /// </summary>
        /// <param name="SancionRaw">Objeto SancionCAd que se utilizara para crear el objeto.</param>
        internal Sancion(TipoSancionCAD SancionRaw)
        {
            this.id = SancionRaw.ID;
            this.duracion = SancionRaw.Duracion;
            this.descripcion = SancionRaw.Descripcion;
        }
        /// <summary>
        /// Constructor que inicializa el objeto con la duracion de la sancion.
        /// </summary>
        /// <param name="Duracion">Duracion de la sancion en dias.</param>
        /// <param name="Descripcion">Descripcion de la sancion a crear.</param>
        internal Sancion(int Duracion, string Descripcion)
        {
            //condiserar el campo descripcion es este constructor
            this.descripcion = Descripcion;            
            this.duracion = Duracion;
        }

        /// <summary>
        /// Metodo para insertar la sancion en la base de datos.
        /// </summary>
        /// <param name="SancionToSave">El objeto Sancion a insertar.</param>
        public static void Save(Sancion SancionToSave)
        {
            TipoSancionCAD.Save(Sancion.MakeRaw(SancionToSave));
        }

        /// <summary>
        /// Metodo para convertir un objeto Sancion de Capa de Negocios en un objeto SancionCAD de Capa Acceso Datos
        /// para luego ser grabado en la base de datos.
        /// </summary>
        /// <param name="SancionToMakeRaw">La sancion a convertir.</param>
        /// <returns></returns>
        public static TipoSancionCAD MakeRaw(Sancion SancionToMakeRaw)
        {
            /*
            TipoSancionCAD SancionToReturn;

            SancionToReturn.ID = SancionToMakeRaw.ID;
            SancionToReturn.Duracion = SancionToMakeRaw.Duracion;
            SancionToReturn.Descripcion = SancionToMakeRaw.Descripcion;

            return SancionToReturn;
            */

            return TipoSancionCAD.CrearTipoSancionCAD(SancionToMakeRaw.ID,
                                                      SancionToMakeRaw.Descripcion,
                                                      SancionToMakeRaw.Duracion);
                                                            
        }
        //---------- </Constructores y demas metodos> ----------//
    }
}
